package com.nageoffer.shortlink.admin.toolkit;

import java.security.SecureRandom;

public class RandomStringGenerator {
    // 字符源：包含大写字母、小写字母和数字
    private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    // 默认生成的随机字符串长度
    private static final int DEFAULT_LENGTH = 6;
    // 使用安全的随机数生成器
    private static final SecureRandom RANDOM = new SecureRandom();

    /**
     * 生成默认长度(6位)包含字母和数字的随机字符串
     * @return 随机字符串
     */
    public static String generateRandomString() {
        return generateRandomString(DEFAULT_LENGTH);
    }

    /**
     * 生成指定长度包含字母和数字的随机字符串
     * @param length 随机字符串的长度，必须大于0
     * @return 指定长度的随机字符串
     * @throws IllegalArgumentException 如果长度小于等于0则抛出异常
     */
    public static String generateRandomString(int length) {
        // 验证长度合法性
        if (length <= 0) {
            throw new IllegalArgumentException("随机字符串长度必须大于0");
        }

        StringBuilder sb = new StringBuilder(length);

        for (int i = 0; i < length; i++) {
            // 从字符源中随机选择一个字符
            int randomIndex = RANDOM.nextInt(CHARACTERS.length());
            sb.append(CHARACTERS.charAt(randomIndex));
        }

        return sb.toString();
    }
}
